<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>13-子项目属性-flex-shrink</title>
</head>
<body>
  <!-- 
    flex-shrink：定义子项目的收缩因子
      默认值为1(默认子项目放不下且没换行就会收缩)
      可取值：正整数、正小数、0。不能为负值。
      只有当子项目宽度超出父容器宽度，且没有设置为可换行的时候，这个属性值才起作用
      注意：首先要明确一点，flex-shrink和flex-basis的共同作用才能得到最终的宽度值
      所有item收缩后的最终宽度不能小于min-width

    计算公式：
      假设一个父容器包含三个item
        flex-basis分别为：
          item1
          item2
          item3
        溢出空间：
          overflowSpace = (item1+item2+item3) - box宽度
        flex-shrink分别为：
          shrink1
          shrink2
          shrink3
        每个元素的压缩份额：
          portion1 = item1*shrink1
          portion2 = item2*shrink2
          portion3 = item3*shrink3
        总的压缩份额：
          totalPortion = portion1 + portion2 + portion3
        每个元素的压缩率：
          ratio1 = portion1/totalPortion
          ratio2 = portion2/totalPortion
          ratio3 = portion3/totalPortion
        最终各元素宽度：
          item1-overflowSpace*ratio1
          item2-overflowSpace*ratio2
          item3-overflowSpace*ratio3
   -->
  <style>
    body {
      margin: 0;
      padding: 0;
      display: flex;
      flex-wrap: wrap;
      margin: 60px;
    }
    div {
      box-sizing: border-box;
      border-radius: 15px;
    }
    .box {
      width: 600px;
      height: 150px;
      background-color: pink;
      box-shadow: 0px 1px 10px 1px #333;
      margin: 30px;

      display: flex;
    }
    .item {
      text-align: center;
      color: #fff;
      font-size: 26px;
      font-weight: bold;
    }
  </style>
  <!-- 
    shrink1+shrink2+shrink3 > 1
    最简单的情况：flex-basis相等都为250，flex-shrink相等为默认值1
    具体计算过程：
      假设一个父容器包含三个item
        flex-basis分别为：
          item1 250
          item2 250
          item3 250
        溢出空间：
          overflowSpace = (item1+item2+item3) - box宽度 750-600=150
        flex-shrink分别为：
          shrink1 1
          shrink2 1
          shrink3 1
        每个元素的压缩份额：
          portion1 = item1*shrink1  250
          portion2 = item2*shrink2  250
          portion3 = item3*shrink3  250
        总的压缩份额：
          totalPortion = portion1 + portion2 + portion3 250+250+250=750
        每个元素的压缩率：
          ratio1 = portion1/totalPortion  1/3
          ratio2 = portion2/totalPortion  1/3
          ratio3 = portion3/totalPortion  1/3
        最终各元素宽度：
          item1-overflowSpace*ratio1 250 - 150*(1/3) = 200
          item2-overflowSpace*ratio2 250 - 150*(1/3) = 200
          item3-overflowSpace*ratio3 250 - 150*(1/3) = 200
   -->
  <style>
    .item1 {
      background-color: purple;
      flex-basis: 250px;
      flex-shrink: 1;
    }
    .item2 {
      background-color: maroon;
      flex-basis: 250px;
      flex-shrink: 1;
    }
    .item3 {
      background-color: orange;
      flex-basis: 250px;
      flex-shrink: 1;
    }
  </style>
  <div class="box box1">
    <div class="item item1">1</div>
    <div class="item item2">2</div>
    <div class="item item3">3</div>
  </div>
  <!-- 
    shrink1+shrink2+shrink3 > 1
    稍微复杂的情况：flex-basis相等都为250，flex-shrink分别为1、2、3
    具体计算过程：
      假设一个父容器包含三个item
        flex-basis分别为：
          item1 250
          item2 250
          item3 250
        溢出空间：
          overflowSpace = (item1+item2+item3) - box宽度 750-600=150
        flex-shrink分别为：
          shrink1 1
          shrink2 2
          shrink3 3
        每个元素的压缩份额：
          portion1 = item1*shrink1 250
          portion2 = item2*shrink2 500
          portion3 = item3*shrink3 750
        总的压缩份额：
          totalPortion = portion1 + portion2 + portion3 250+500+750=1500
        每个元素的压缩率：
          ratio1 = portion1/totalPortion 1/6
          ratio2 = portion2/totalPortion 1/3
          ratio3 = portion3/totalPortion 1/2
        最终各元素宽度：
          item1-overflowSpace*ratio1 250-150*(1/6) = 225
          item2-overflowSpace*ratio2 250-150*(1/3) = 200
          item3-overflowSpace*ratio3 250-150*(1/2) = 175
  -->
  <style>
    .box2 .item1 {
      background-color: purple;
      flex-basis: 250px;
      flex-shrink: 1;
    }
    .box2 .item2 {
      background-color: maroon;
      flex-basis: 250px;
      flex-shrink: 2;
    }
    .box2 .item3 {
      background-color: orange;
      flex-basis: 250px;
      flex-shrink: 3;
    }
  </style>
  <div class="box box2">
    <div class="item item1">1</div>
    <div class="item item2">2</div>
    <div class="item item3">3</div>
  </div>


<!-- 
  shrink1+shrink2+shrink3 > 1
  更复杂的情况：flex-basis分别为100、200、500，flex-shrink分别为1、2、3
  具体计算过程：
    假设一个父容器包含三个item
      flex-basis分别为：
        item1 100
        item2 200
        item3 500
      溢出空间：
        overflowSpace = (item1+item2+item3) - box宽度 800-600=200
      flex-shrink分别为：
        shrink1 1
        shrink2 2
        shrink3 3
      每个元素的压缩份额：
        portion1 = item1*shrink1 100
        portion2 = item2*shrink2 400
        portion3 = item3*shrink3 1500
      总的压缩份额：
        totalPortion = portion1 + portion2 + portion3 100+400+1500=2000
      每个元素的压缩率：
        ratio1 = portion1/totalPortion 1/20
        ratio2 = portion2/totalPortion 1/5
        ratio3 = portion3/totalPortion 3/4
      最终各元素宽度：
        item1-overflowSpace*ratio1 100-200*(1/20) = 90
        item2-overflowSpace*ratio2 200-200*(1/5) = 160
        item3-overflowSpace*ratio3 500-200*(3/4) = 350
 -->
<style>
  .box3 .item1 {
    background-color: purple;
    flex-shrink: 1;
    flex-basis: 100px;
  }
  .box3 .item2 {
    background-color: maroon;
    flex-shrink: 2;
    flex-basis: 200px;
  }
  .box3 .item3 {
    background-color: orange;
    flex-shrink: 3;
    flex-basis: 500px;
  }
</style>
<div class="box box3">
  <div class="item item1">1</div>
  <div class="item item2">2</div>
  <div class="item item3">3</div>
</div>

<!-- 

shrink1+shrink2+shrink3 < 1
这种情况下子项目收缩后依然超出父容器
最复杂的情况：flex-basis分别为100、200、500，flex-shrink分别为0.1、0.2、0.3
具体计算过程：
  假设一个父容器包含三个item
    flex-basis分别为：
      item1 100
      item2 200
      item3 500
    溢出空间：
      overflowSpace = (item1+item2+item3) - box宽度 800-600=200
    flex-shrink分别为：
      shrink1 0.1
      shrink2 0.2
      shrink3 0.3
    每个元素的压缩份额：
      portion1 = item1*shrink1 10
      portion2 = item2*shrink2 40
      portion3 = item3*shrink3 150
    总的压缩份额：
      totalPortion = portion1 + portion2 + portion3 200
    每个元素的压缩率：
      ratio1 = portion1/totalPortion 1/20
      ratio2 = portion2/totalPortion 1/5
      ratio3 = portion3/totalPortion 3/4
    最终各元素宽度：
      item1-overflowSpace*ratio1*totalPortion 100-200*(1/20)*0.6 = 100-6 = 94
      item2-overflowSpace*ratio2*totalPortion 200-200*(1/5)*0.6 = 200-24 = 176
      item3-overflowSpace*ratio3*totalPortion 500-200*(3/4)*0.6 = 500-90 = 410
 -->

<style>
  .box4 .item1 {
    background-color: purple;
    flex-shrink: 0.1;
    flex-basis: 100px;
  }
  .box4 .item2 {
    background-color: maroon;
    flex-shrink: 0.2;
    flex-basis: 200px;
  }
  .box4 .item3 {
    background-color: orange;
    flex-shrink: 0.3;
    flex-basis: 500px;
  }
</style>
<div class="box box4">
  <div class="item item1">1</div>
  <div class="item item2">2</div>
  <div class="item item3">3</div>
</div>
  
</body>
</html>